<?php

/**
 * BH MEDIA
 * @author Ha Anh Man - manphp@binhhoang.com
 * @version 1.0
 * @package JobSearch
 * @copyright 2012
 * 
 */
class RoleController extends BackendController {

    public function actionIndex() {
        $this->checkRole(Yii::app()->controller->id, 'index');
        $data['roles'] = Role::model()->findAll();
        $this->render('index', array('data' => $data));
    }

    public function actionAdd() {
        $this->checkRole(Yii::app()->controller->id, 'add');
        $data = array();
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $messages = array();
            $role = $_POST['role'];
            if (empty($role)) {
                $messages[] = 'Vui lòng nhập quyền';
            } else {
                $check = Role::model()->find('role = :role', array(':role' => $role));
                if (!empty($check)) {
                    $messages[] = 'Quyền <strong>' . $role . '</strong> đã tồn tại rồi';
                }
            }
            if (empty($messages)) {
                $r = new Role();
                $r->role = $role;
                $r->save();
                createMessage('Tạo mới quyền <strong>' . $role . '</strong> thành công');
                $this->redirect(array('role/index'));
            } else {
                createMessage($messages, 'errormsg');
                $data['role']['role'] = $role;
            }
        }
        $this->render('form', array('data' => $data));
    }

    public function actionEdit() {
        $this->checkRole(Yii::app()->controller->id, 'edit');
        $id = $_GET['id'];
        $data = array();
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {
            $messages = array();
            $role = $_POST['role'];
            if (empty($role)) {
                $messages[] = 'Vui lòng nhập quyền';
            } else {
                $check = Role::model()->find('role = :role AND id <> ' . $id, array(':role' => $role));
                if (!empty($check)) {
                    $messages[] = 'Quyền <strong>' . $role . '</strong> đã tồn tại rồi';
                }
            }
            if (empty($messages)) {
                $r = Role::model()->findByPk($id);
                $r->role = $role;
                $r->save();
                createMessage('Sửa quyền <strong>' . $role . '</strong> thành công');
                $this->redirect(array('role/index'));
            } else {
                createMessage($messages, 'errormsg');
                $data['role']['role'] = $role;
            }
        } else {
            $data['role'] = Role::model()->findByPk($id);
            if (empty($data['role'])) {
                createMessage('Không tìm thấy nội dung yêu cầu', 'errormsg');
                $this->redirect(array('role/index'));
            }
            $data['role'] = $data['role']->attributes;
        }



        $this->render('form', array('data' => $data));
    }

    public function actionPermission() {
        $this->checkRole(Yii::app()->controller->id, 'permission');
        $id = $_GET['id'];

        //lay quyen hien tia
        $roles = Role::model()->findByPk($id);
        $data['action'] = array();
        if (!empty($roles)) {
            $permission = Permission::model()->findAll('role_id = ' . $id);
            foreach ($permission as $item) {                
                $r = $item->attributes;
                if ($r['actions'] != '') {
                    $data['action'][$r['controller']] = unserialize($r['actions']);
                }
            }
        }
        if ($_SERVER['REQUEST_METHOD'] == 'POST') {

            if (!empty($_POST)) {
                Permission::model()->deleteAll('role_id = ' . $id);
                foreach ($_POST as $controller => $actions) {
                    $new_per = new Permission();
                    $new_per->role_id = $id;
                    $new_per->controller = $controller;
                    $new_per->actions = serialize($actions);
                    $new_per->save();
                }
                createMessage('Phân quyền cho loại: <strong>' . $roles->role . '</strong>');
            }
            $this->redirect(array('role/index'));
        }

        $data['role'] = array();

        $data['role'] = $roles;

        $xml = ROOT_PATH . '/protected/config/access.xml';
        if (file_exists($xml)) {
            $access = simplexml_load_file($xml);
            $access = json_decode(json_encode($access), true);
            $data['acl'] = array();
            foreach ($access['controllers'] as $item) {
                $data['acl'][$item['controller']] = $item;
            }
        }
        $this->render('permission', array('data' => $data));
    }

    public function actionDelete() {
        $this->checkRole(Yii::app()->controller->id, 'delete');
        $id = $_GET['id'];
        $role = Role::model()->findByPk($id);
        if (empty($role)) {
            createMessage('Không tìm thấy nội dung yêu cầu', 'errormsg');
        } else {            
            createMessage('Xóa role <strong>' . $role->role . '</strong> thành công');
            //xoa quyen nay trong toan bo user
            UserRole::model()->deleteAll('role_id = ' . $id);
            
            //xoa phan quyen cua role nayf
            Permission::model()->deleteAll('role_id = ' . $id);
            $role->delete();
        }
        $this->redirect(array('role/index'));
    }

}